#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:taotieren


"""
    rpi.gpio 需要 root 权限，板上运行需要使用
    sudo python adc_temp.py
    ADC(模数转换器)分压器

        MCP3008 八通道 ADC IC， TMP36 温度传感器
        安装时芯片缺口朝上
        TMP36 会输出一个稳定成正比的电压。根据 TMP36 数据手册的说明，摄氏温度可以通过电压（V）乘以 100 减去 50 计算出来。
        TMP36 适用于近似温度，精度 2摄氏度，如果使用长导线连接精度将会更差。
        追求更高精度的话可以使用 DS18B20 数字温度传感器， -10~85℃ 精度 0.5%

        实验前，确保开启 SPI，并且安装好了 Python 的 SPI 库 （pip install spidev）

    MCP3008 是 10 比特 的 ADC，每次读取的时候会返回一个介于 0 到 1023 之间的数字
        测试程序将会把它转化为电压值，方法是将读取的数值乘以电压范围（3.3V）然后除以 1024.


"""

""" 非树莓派环境下可以用 rpi.gpio_def 代替 rpi.gpio 来进行程序调试和验证 """

import spidev, time

spi = spidev.SpiDev()
spi.open(0, 0)


def analog_read(channel):
    r = spi.xfer2([1, (8 + channel) << 4, 0])
    adc_out = ((r[1] & 3) << 8) + r[2]
    return adc_out


while True:
    reading = analog_read(0)
    voltage = reading * 3.3 / 1024
    temp_c = voltage * 100 - 50
    temp_f = temp_c * 9.0 / 5.0 + 32
    print("Temp C = %f\t\tTemp f = %f" % (temp_c, temp_f))
    time.sleep(1)
